package view.backing.AlmacenesEstadisticos;

import chemtools_logica.Beans.AlmacenBean;
import chemtools_logica.Beans.EmpresaBean;
import chemtools_logica.Beans.ProduccionEstBean;
import chemtools_logica.Beans.TipoinsumoBean;
import chemtools_logica.Beans.UsuarioBean;

import chemtools_logica.Entidades.Graficoempresas;
import chemtools_logica.Entidades.Graficoestado;
import chemtools_logica.Entidades.Graficotipoinsumo;

import chemtools_logica.LN.IR.LN_SFAlmacenRemote;
import chemtools_logica.LN.IR.LN_SFContenedoresRemote;
import chemtools_logica.LN.IR.LN_SFEmpresaRemote;
import chemtools_logica.LN.IR.LN_SFInsumoRemote;
import chemtools_logica.LN.IR.LN_SFMedidaRemote;
import chemtools_logica.LN.IR.LN_SFProductoRemote;
import chemtools_logica.LN.IR.LN_SFTipoinsumoRemote;
import chemtools_logica.LN.IR.LN_SFTipoproductoRemote;
import chemtools_logica.LN.IR.LN_SFTransformacionesRemote;

import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;

import java.util.List;

import javax.annotation.PostConstruct;

import javax.faces.context.FacesContext;

import javax.faces.event.ActionEvent;

import javax.faces.model.SelectItem;

import javax.naming.Context;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import javax.servlet.http.HttpSession;

import oracle.adf.view.faces.bi.component.graph.UIGraph;
import oracle.adf.view.faces.bi.event.ClickEvent;
import oracle.adf.view.rich.component.rich.RichForm;
import oracle.adf.view.rich.component.rich.RichPopup;
import oracle.adf.view.rich.component.rich.data.RichTable;
import oracle.adf.view.rich.component.rich.input.RichInputDate;
import oracle.adf.view.rich.component.rich.input.RichInputText;

import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice;

import oracle.dss.dataView.Attributes;
import oracle.dss.dataView.ComponentHandle;
import oracle.dss.dataView.DataComponentHandle;

import view.backing.Transformaciones.Frm_transformaciones;
import view.backing.Utils.Utils;

public class frm_AlmacenesEstadisticos {
    private bSessionScopeBeanAlmacenesEstadisticos sessionScopeBeanAlmacenesEstadisticos;
    private LN_SFTipoinsumoRemote lN_SFTipoinsumoRemote;
    private LN_SFTipoproductoRemote lN_SFTipoproductoRemote;
    private LN_SFProductoRemote lN_SFProductoRemote;
    private LN_SFEmpresaRemote lN_SFEmpresaRemote;
    private LN_SFAlmacenRemote lN_SFAlmacenRemote;
    
    private RichForm formAlmacenesEstadisticos;
    private RichInputText nombreAlmacen;
    private RichInputDate inputFecIni;
    private RichInputDate inputFecFin;
    private UIGraph chart1;
    private UIGraph chart2;
    private UIGraph chart3;
    private UIGraph chart4;
    private UIGraph chart5;
    private UIGraph chart6;
    private RichSelectOneChoice inputAlmacenSelecc;
    private RichTable tbtInsumos;
    private RichPopup poptInsumosChart1;


    public frm_AlmacenesEstadisticos(){
    }
    
    @PostConstruct
    public void methodInvokeOncedOnPageLoad() {
        try {
            final Context context = getInitialContext();
            lN_SFTipoinsumoRemote = (LN_SFTipoinsumoRemote) context.lookup("map-LN_SFTipoinsumo#chemtools_logica.LN.IR.LN_SFTipoinsumoRemote");
            lN_SFTipoproductoRemote = (LN_SFTipoproductoRemote) context.lookup("map-LN_SFTipoproducto#chemtools_logica.LN.IR.LN_SFTipoproductoRemote");
            lN_SFProductoRemote = (LN_SFProductoRemote) context.lookup("map-LN_SFProducto#chemtools_logica.LN.IR.LN_SFProductoRemote");
            lN_SFEmpresaRemote = (LN_SFEmpresaRemote) context.lookup("map-LN_SFEmpresa#chemtools_logica.LN.IR.LN_SFEmpresaRemote");
            lN_SFAlmacenRemote = (LN_SFAlmacenRemote) context.lookup("map-LN_SFAlmacen#chemtools_logica.LN.IR.LN_SFAlmacenRemote");  
        }catch(Exception e){}
        
        HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        UsuarioBean usuario = (UsuarioBean) sesion.getAttribute("usuario");
        sessionScopeBeanAlmacenesEstadisticos.setUsuario(usuario);
        
        sessionScopeBeanAlmacenesEstadisticos.setListaAlmacen(this.llenarAlmacen());
    }
    
    public void limpiaryrefrescar(ActionEvent event){
        getInputFecFin().setValue("");
        getInputFecIni().setValue("");
        getInputAlmacenSelecc().setValue(0);
        
        Utils.addTargetMany(getInputAlmacenSelecc(),getInputFecFin(),getInputFecIni());
    }
    
    public void llenarGraficos(ActionEvent event){
        this.Grafico_1();
        this.Grafico_2();
        this.Grafico_3();
        this.Grafico_4();
        this.Grafico_5();
        this.Grafico_6();
    }
    
    //GRAFICO N°1
    public void Grafico_1(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date   = sessionScopeBeanAlmacenesEstadisticos.getFechaMin();
        Date date1  = sessionScopeBeanAlmacenesEstadisticos.getFechaMax();
        int almacen = sessionScopeBeanAlmacenesEstadisticos.getAlmacenSelecc();
        String idAlmacen = almacen+"";
        if(almacen == 0){
            idAlmacen = null;
        }
        try{
            String f = sdf.format(date);
            String f1 = sdf.format(date1);
            date = sdf.parse(f);
            date1 = sdf.parse(f1);
        }catch(Exception e){}
        List<Graficotipoinsumo> lista = lN_SFTipoinsumoRemote.getChartTipoInsumo(idAlmacen, date, date1);
        getChart1().setTabularData(this.DataGraficoLine(lista));
        Utils.addTarget(getChart1());
    }
    
    public List DataGraficoLine(List<Graficotipoinsumo> lista){
        ArrayList data = new ArrayList();
        for(Graficotipoinsumo bean: lista){
            Long i = bean.getCuenta();
            Integer a = i.intValue();
            String desc = bean.getAno()+" "+bean.getMes();
            Object[] data2 = new Object[3];
            data2[0] = desc;
            data2[1] = bean.getDescripcion();;
            data2[2] = bean.getContenido();
            data.add(data2);
        }
        return data; 
    }
    
    //GRAFICO N°2
    public void Grafico_2(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date   = sessionScopeBeanAlmacenesEstadisticos.getFechaMin();
        Date date1  = sessionScopeBeanAlmacenesEstadisticos.getFechaMax();
        try{
            String f = sdf.format(date);
            String f1 = sdf.format(date1);
            date = sdf.parse(f);
            date1 = sdf.parse(f1);
        }catch(Exception e){}
        List<Graficoempresas> lista = lN_SFTipoinsumoRemote.getChartTipoInsumoEmpresa(date, date1);
        getChart2().setTabularData(this.DataPie2(lista));
        Utils.addTarget(getChart2());
    }
    
    public void clickListenerGanPie(ClickEvent clickEvent) {
        ComponentHandle handle = clickEvent.getComponentHandle();
        String nombre = null;
        String valor = null;
        if (handle instanceof DataComponentHandle) {
            DataComponentHandle dhandle = (DataComponentHandle) handle;
            Attributes[] groupInfo = dhandle.getGroupAttributes();
            Attributes[] seriesInfo = dhandle.getSeriesAttributes();
            if (groupInfo != null) {
                for (Attributes attrs : groupInfo) {
                    nombre = (String) attrs.getValue(Attributes.LABEL_VALUE);
                }
                for (Attributes attrs : seriesInfo) {
                    valor = (String) attrs.getValue(Attributes.LABEL_VALUE);
                }
            }
        }
        List<TipoinsumoBean> tIsumos = lN_SFTipoinsumoRemote.getTInsumoChart1(valor);
        sessionScopeBeanAlmacenesEstadisticos.setListaTipoInsumoChart1(tIsumos);
        getTbtInsumos().setValue(tIsumos);
        Utils.addTarget(getTbtInsumos());
        
        Utils.showPopUpMIDDLE(getPoptInsumosChart1());
    }
    
    public List DataPie2(List<Graficoempresas> lista) {
        ArrayList ListData = new ArrayList();
        for(Graficoempresas bean: lista){
            Object[] data = new Object[3];
            data[0]= "";
            data[1]= bean.getRazonSocial();
            data[2] = bean.getCuenta();
            ListData.add(data);
        }
        return ListData;
    }
    
    //GRAFICO N°3
    public void Grafico_3(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date   = sessionScopeBeanAlmacenesEstadisticos.getFechaMin();
        Date date1  = sessionScopeBeanAlmacenesEstadisticos.getFechaMax();
        int almacen = sessionScopeBeanAlmacenesEstadisticos.getAlmacenSelecc();
        String idAlmacen = almacen+"";
        if(almacen == 0){
            idAlmacen = null;
        }
        try{
            String f = sdf.format(date);
            String f1 = sdf.format(date1);
            date = sdf.parse(f);
            date1 = sdf.parse(f1);
        }catch(Exception e){}
        List<Graficoestado> lista = lN_SFTipoinsumoRemote.getChartInsumoEstado(idAlmacen,date, date1);
        getChart3().setTabularData(this.DataPie3(lista));
        Utils.addTarget(getChart3());
    }
    
    public List DataPie3(List<Graficoestado> lista) {
        ArrayList ListData = new ArrayList();
        for(Graficoestado bean: lista){
            Object[] data = new Object[3];
            data[0]= "";
            data[1]= bean.getDescripcion();
            data[2] = bean.getCuenta();
            ListData.add(data);
        }
        return ListData;
    }
    
    //GRAFICO N°4
    public void Grafico_4(){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date date   = sessionScopeBeanAlmacenesEstadisticos.getFechaMin();
        Date date1  = sessionScopeBeanAlmacenesEstadisticos.getFechaMax();
        int almacen = sessionScopeBeanAlmacenesEstadisticos.getAlmacenSelecc();
        String idAlmacen = almacen+"";
        if(almacen == 0){
            idAlmacen = null;
        }
        try{
            String f = sdf.format(date);
            String f1 = sdf.format(date1);
            date = sdf.parse(f);
            date1 = sdf.parse(f1);
        }catch(Exception e){}
        List<Graficotipoinsumo> lista = lN_SFTipoproductoRemote.getChartTipoProducto(idAlmacen, date, date1);
        getChart4().setTabularData(this.DataGraficoLine(lista));
        Utils.addTarget(getChart4());  
    }
    
    //GRAFICO N°5
    public void Grafico_5(){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date date   = sessionScopeBeanAlmacenesEstadisticos.getFechaMin();
        Date date1  = sessionScopeBeanAlmacenesEstadisticos.getFechaMax();
        try{
            String f = sdf.format(date);
            String f1 = sdf.format(date1);
            date = sdf.parse(f);
            date1 = sdf.parse(f1);
        }catch(Exception e){}
        List<Graficoempresas> lista = lN_SFTipoproductoRemote.getChartTipoProductoEmpresa(date, date1);
        getChart5().setTabularData(this.DataPie2(lista));
        Utils.addTarget(getChart5());
    }
    
    //GRAFICO N°6
    public void Grafico_6(){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date date   = sessionScopeBeanAlmacenesEstadisticos.getFechaMin();
        Date date1  = sessionScopeBeanAlmacenesEstadisticos.getFechaMax();
        int almacen = sessionScopeBeanAlmacenesEstadisticos.getAlmacenSelecc();
        String idAlmacen = almacen+"";
        if(almacen == 0){
            idAlmacen = null;
        }
        try{
            String f = sdf.format(date);
            String f1 = sdf.format(date1);
            date = sdf.parse(f);
            date1 = sdf.parse(f1);
        }catch(Exception e){}
        List<Graficoestado> lista = lN_SFProductoRemote.getChartGraficoProductoEstado(idAlmacen, date, date1);
        getChart6().setTabularData(this.DataPie3(lista));
        Utils.addTarget(getChart6());
    }
    
    public ArrayList llenaEmpresa() {
        ArrayList empresas = new ArrayList();
        List<EmpresaBean> EmpresaBean = lN_SFEmpresaRemote.getAllEmpresas();
        for (EmpresaBean e : EmpresaBean) {
            empresas.add(new SelectItem(e.getIdEmpresa(),e.getRazonSocial()));
        }
        
        return empresas;
    }
    
    public ArrayList llenarAlmacen(){
        ArrayList almacenes = new ArrayList();
        List<AlmacenBean> EmpresaBean = lN_SFAlmacenRemote.getAllAlmacen();
        for (AlmacenBean e : EmpresaBean) {
            almacenes.add(new SelectItem(e.getIdAlmacen(),e.getNombre()));
        } 
        return almacenes;
    }
    
    private static Context getInitialContext() throws NamingException {
        Hashtable env = new Hashtable();
        // WebLogic Server 10.x/12.x connection details
        env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
        env.put(Context.PROVIDER_URL, "t3://127.0.0.1:7101");
        return new InitialContext(env);
    }

    public void setFormAlmacenesEstadisticos(RichForm formAlmacenesEstadisticos) {
        this.formAlmacenesEstadisticos = formAlmacenesEstadisticos;
    }

    public RichForm getFormAlmacenesEstadisticos() {
        return formAlmacenesEstadisticos;
    }

    public void setSessionScopeBeanAlmacenesEstadisticos(bSessionScopeBeanAlmacenesEstadisticos sessionScopeBeanAlmacenesEstadisticos) {
        this.sessionScopeBeanAlmacenesEstadisticos = sessionScopeBeanAlmacenesEstadisticos;
    }

    public bSessionScopeBeanAlmacenesEstadisticos getSessionScopeBeanAlmacenesEstadisticos() {
        return sessionScopeBeanAlmacenesEstadisticos;
    }

    public void setNombreAlmacen(RichInputText nombreAlmacen) {
        this.nombreAlmacen = nombreAlmacen;
    }

    public RichInputText getNombreAlmacen() {
        return nombreAlmacen;
    }

    public void setInputFecIni(RichInputDate inputFecIni) {
        this.inputFecIni = inputFecIni;
    }

    public RichInputDate getInputFecIni() {
        return inputFecIni;
    }

    public void setInputFecFin(RichInputDate inputFecFin) {
        this.inputFecFin = inputFecFin;
    }

    public RichInputDate getInputFecFin() {
        return inputFecFin;
    }

    public void setChart1(UIGraph chart1) {
        this.chart1 = chart1;
    }

    public UIGraph getChart1() {
        return chart1;
    }

    public void setChart2(UIGraph chart2) {
        this.chart2 = chart2;
    }

    public UIGraph getChart2() {
        return chart2;
    }

    public void setChart3(UIGraph chart3) {
        this.chart3 = chart3;
    }

    public UIGraph getChart3() {
        return chart3;
    }

    public void setChart4(UIGraph chart4) {
        this.chart4 = chart4;
    }

    public UIGraph getChart4() {
        return chart4;
    }

    public void setChart5(UIGraph chart5) {
        this.chart5 = chart5;
    }

    public UIGraph getChart5() {
        return chart5;
    }

    public void setChart6(UIGraph chart6) {
        this.chart6 = chart6;
    }

    public UIGraph getChart6() {
        return chart6;
    }

    public void setInputAlmacenSelecc(RichSelectOneChoice inputAlmacenSelecc) {
        this.inputAlmacenSelecc = inputAlmacenSelecc;
    }

    public RichSelectOneChoice getInputAlmacenSelecc() {
        return inputAlmacenSelecc;
    }

    public void setTbtInsumos(RichTable tbtInsumos) {
        this.tbtInsumos = tbtInsumos;
    }

    public RichTable getTbtInsumos() {
        return tbtInsumos;
    }

    public void setPoptInsumosChart1(RichPopup poptInsumosChart1) {
        this.poptInsumosChart1 = poptInsumosChart1;
    }

    public RichPopup getPoptInsumosChart1() {
        return poptInsumosChart1;
    }
}
